package cn.youqu.happy.module.youqu.service.userComment;

import cn.hutool.core.lang.tree.Tree;
import cn.youqu.happy.framework.common.pojo.PageResult;
import cn.youqu.happy.module.youqu.controller.admin.userComment.vo.UserCommentCreateReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userComment.vo.UserCommentExportReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userComment.vo.UserCommentPageReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userComment.vo.UserCommentUpdateReqVO;
import cn.youqu.happy.module.youqu.controller.app.userComment.vo.AppUserCommentDetailPageReqVO;
import cn.youqu.happy.module.youqu.controller.app.userComment.vo.AppUserCommentDetailRespVO;
import cn.youqu.happy.module.youqu.controller.app.userComment.vo.AppUserCommentPublishReqVO;
import cn.youqu.happy.module.youqu.controller.app.userComment.vo.AppUserCommentReplyAssessReqVO;
import cn.youqu.happy.module.youqu.dal.dataobject.userComment.UserCommentDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 用户回复 Service 接口
 *
 * @author 王其岩 20112001045
 */
public interface UserCommentService {

    /**
     * 创建用户回复
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer publishUserComment(@Valid UserCommentCreateReqVO createReqVO);

    /**
     * 创建评论
     *
     * @param createReqVO
     * @param uid
     * @return
     */
    Integer publishUserComment(@Valid AppUserCommentPublishReqVO createReqVO, Long uid);


    /**
     * 更新用户回复
     *
     * @param updateReqVO 更新信息
     */
    void updateUserComment(@Valid UserCommentUpdateReqVO updateReqVO);

    /**
     * 删除用户回复
     *
     * @param id 编号
     */
    void deleteUserComment(Integer id);

    /**
     * 用户删除评论
     *
     * @param id
     * @param uid
     */
    void deleteUserComment(Integer id, Long uid);

    /**
     * 获得用户回复
     *
     * @param id 编号
     * @return 用户回复
     */
    UserCommentDO getUserComment(Integer id);

    /**
     * 用户获取评论
     *
     * @param id
     * @param uid
     * @return
     */
    UserCommentDO getUserComment(Integer id, Long uid);

    /**
     * 获得用户回复列表
     *
     * @param ids 编号
     * @return 用户回复列表
     */
    List<UserCommentDO> getUserCommentList(Collection<Integer> ids);

    List<UserCommentDO> getUserCommentList(Collection<Integer> ids, Long uid);


    /**
     * 获得用户回复分页
     *
     * @param pageReqVO 分页查询
     * @return 用户回复分页
     */
    PageResult<UserCommentDO> getUserCommentPage(UserCommentPageReqVO pageReqVO);

    /**
     * 筛选用户可见的评论
     * 1.如果获取 其他用户 回复的评论 只筛选用户可见的(排除拉黑)
     * 2.如果获取 某个用户说说的评论 判断友说 用户是否可见
     * 3.如果获取 自己的评论 不做筛选
     *
     * @param pageReqVO
     * @param uid
     * @return
     */
    PageResult<UserCommentDO> getUserCommentPage(UserCommentPageReqVO pageReqVO, Long uid);

    /**
     * 通过说说id获取评论分页
     *
     * @param detailPageReqVO
     * @param uid
     * @return
     */
    PageResult<Tree<AppUserCommentDetailRespVO>> getUserCommentDetailPageByTellId(AppUserCommentDetailPageReqVO detailPageReqVO, Long uid);

    /**
     * 获得用户回复列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 用户回复列表
     */
    List<UserCommentDO> getUserCommentList(UserCommentExportReqVO exportReqVO);

    Integer replyAssessUserComment(AppUserCommentReplyAssessReqVO replyAssessReqVO, Long loginUserId);

    void updateUserInfoToUserComment(String nickname,String avatar,Long uid);

}
